CREATE PROCEDURE GGRR_REGISTRAR_PRODUCTO
@NOMBRE VARCHAR(100),
@DESC VARCHAR(200),
@TIPOPROD INTEGER,
@UNIDAD VARCHAR(100),
@ESTADOTRAN INTEGER OUTPUT
AS

SET TRANSACTION ISOLATION LEVEL SERIALIZABLE

BEGIN TRANSACTION

DECLARE @CONT INTEGER
DECLARE @IDTIPO INTEGER
--hay 3 tipos de estado: 0=ERROR, 1=CORRECTO, 2=YA ESTA REGISTRADO
BEGIN TRY
	--vemos primero si ya existe el doc de identidad
	SET @CONT = (SELECT COUNT(*) FROM PRODUCTO WHERE nombre = @NOMBRE)
	--ya se registro ese producto, termina la transaccion y muestra un mensaje de error
	IF @CONT > 0 
	BEGIN
		SET @ESTADOTRAN = 2
		ROLLBACK TRANSACTION
	END
	ELSE
	BEGIN
		--el nuevo codigo del producto sera creado con un trigger
		--obtenemos el id del tipo del producto
		SET @IDTIPO = (SELECT @IDTIPO FROM TIPOPRODUCTO
						 WHERE DESCRIPCION = @TIPOPROD)
		--insertamos el nuevo producto
		
		INSERT INTO PRODUCTO (NOMBRE, DESCRIPCION, UNIDAD, IDTIPOPRODUCTO) VALUES (@NOMBRE,
		@DESC, @UNIDAD, @IDTIPO)
		
		--si no hay errores, se termina la transaccion
		SET @ESTADOTRAN = 1
		COMMIT TRANSACTION
	END
END TRY
BEGIN CATCH
	SET @ESTADOTRAN = 0
	ROLLBACK TRANSACTION
END CATCH
	